"""
爬虫原理:
1.准备数据(网站地址)
2.发送请求, 获取响应
3.解析响应, 数据提取
4.保存
浏览器访问Web服务器的过程:
1.dns解析服务：将域名解析成IP地址+端口
2.浏览器通过这个IP地址+端口建立连接(tcp的三次握手)
3.发送HTTP请求数据
4.(根据请求获取资源)根据查询参数访问服务器的资源若没有查询参数，则访问这个IP+port的资源，首页资源
(返回资源给WEB服务器)
5.浏览器拿到了服务器返回的http响应，展示在浏览器上(返回HTTP响应数据)
get请求： 获取web服务器的数据
post请求  提交本地数据给服务器
user_agent: 浏览器的身份，目的：欺骗服务器
Cookie：用户(浏览器)的缓存，缓存的用户信息(身份信息)或者是浏览记录信息
        VIP机制的，权限机制
Host: 服务器的域名
referer: 来源，目的，告诉对方服务器，这个请求的来源
无痕窗口:
无痕模式下的对地址访问成功，代表该地址的headers只需要一个ua一个键值对
通过无痕模式来判断地址的访问需要那些headers的键值对
非无痕模式下
打开一个新的浏览器窗口，访问地址，能够访问，说明header中，需要ua，cookie即可
除上述操作，地址不能够访问，则需要携带referer字段
开发者工具工作簿(网络):
1.preserve log  保留历史抓包记录
2.filter过滤   过滤抓包需求的包(规则自定义)
3.类别区筛选
all: 显示所有包
XHR：异步加载的包显示位置
js：js文件的请求
CSS:CSS文件的请求
img:对图片的请求
放大镜搜索:
全局搜索
search搜索:
全局搜索
右上角，三个点点击，即可
console控制台:
sources来源:
代码的调试观察
js断点调试
"""
"""
爬虫请求库
pip install requests
配置pip全局安装源
1.windows键+r键开打运行窗口，输入%appdata%
    执行效果：自动打开一个文件夹
2.在当前文件夹中，新建一个文件夹，命名为pip
3.进入pip文件夹，新建一个文本文档
4.打开文本文档，输入以下内容
[global]
timeout = 1000
index-url = https://mirrors.aliyun.com/pypi/simple
trusted-host = mirrors.aliyun.com
5.修改文件名称和后缀，变成配置文件
    修改为pip.ini
安装模块
1.在pycharm的左下角，点击terminal按钮,打开终端
    输入pip install requests 回车
"""
import requests
# url = 'https://www.baidu.com'
# response = requests.get(url)
# print(response.content.decode('utf-8'))
# # print(response.text)
#-------------------------------------------
# # 获取源码方法
# # 类型区别
# # response.content.decode(): str类型
# url = 'https://www.baidu.com'
# response = requests.get(url)
# result = response.content.decode()
# print(result, type(result))
# print(response.content, type(response.content))
# # response.content: bytes类型，二进制数据
# #
# # response.text: str类型
# # result1 = response.text
# # print(result1, type(result1))
#------------------------------------------------
# """response响应对象的其他方法"""
# url = 'https://www.baidu.com'
# response = requests.get(url)
# # 获取响应的url地址
# print(response.url)
# #获取响应状态码
# print(response.status_code)
# #获取响应对应的请求头
# print(response.request.headers)
# #获取响应头
# print(response.headers)
# #获取响应的cookie
# print(response.cookies)
# #获取响应的json数据
# print(response.json())
# """
# response.json() 获取响应的json数据
# 使用此方法的前置条件
# # 响应内容必须是json数据，才可以使用此方法
# # 什么是json数据？
# # json数据就是字典数据
# 在前端：有一种数据结构和我们的python字典是一模一样的，前端称这种数据叫json数据
# 在python：这种结构的数据类型叫字典类型
# """
#-------------------------------------------------------
"""发送带headers的请求"""
# headers的作用：模拟浏览器，欺骗服务器，获取和浏览器一致的内容
# 添加请求头：加强了爬虫程序的稳定性
# headers的形式：字典的形式
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'
}
url = 'https://www.baidu.com'
response = requests.get(url, headers=headers)
print(response.content.decode())